import { getAction, postAction } from '../controller';

export interface GetClinicScheduleRespReq {
  /**
   * 预约时间
   */
  appointmentDate?: string

  /**
   * 医生iD
   */
  doctorId?: number

  /**
   * 医生名称
   */
  doctorName?: string

  /**
   * 所属科室
   */
  sectionId?: number
}

export interface GetClinicScheduleRespVO {
  /**
   * 可预约人数
   */
  count?: number
  clinicPeriod?: number
  /**
   * 诊室Id
   */
  clinicRoomId?: number
  clinicType?: number
  /**
   * 科室Id
   */
  sectionId?: number
  /**
   * 科室名称
   */
  sectionName?: string
  /**
   * 医生
   */
  doctorId: number
  /**
   * 医生名称
   */
  doctorName?: string
  /**
   * 医生职称
   */
  professionalTitle?: string
  /**
   * 个人简介
   */
  personalProfile?: string
  /**
   * 挂号费
   */
  registrationFee?: number
  /**
   * 出诊时间段
   */
  visitTime?: ClinicTimeCountRespVO[]
  /**
   * 病区Id
   */
  wardId?: number
  /**
   * 医生头像
   */
  doctorImg?: string
}

/**
 * 出诊默认时间段 DO
 */
export interface ClinicTimeCountRespVO {
  /**
   * 号数
   */
  appointmentCount?: number
  /**
   * 出诊星期，用二进制位表示（0-6 分别表示周一到周日）
   */
  availableDays?: number[]
  /**
   * 出诊Id
   */
  clinicId?: number
  /**
   * 剩余号数
   */
  count?: number
  /**
   * 创建时间
   */
  createTime?: string
  /**
   * 创建者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  creator?: string
  /**
   * 是否删除
   */
  deleted?: boolean
  /**
   * 截止时间
   */
  endTime?: string
  /**
   * 主键id
   */
  id?: number
  /**
   * 起始时间
   */
  startTime?: string
  /**
   * 更新者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  updater?: string
  /**
   * 最后更新时间
   */
  updateTime?: string
}

/**
 * GetDoctorClinicDaysRespVO
 */
export interface GetDoctorClinicDaysRespVO {
  /**
   * 月中的天
   */
  day?: number
  /**
   * 是否已有号 1:有号 2：无号
   */
  isNumbered?: number
  /**
   * 日期
   */
  localDate?: string
  /**
   * 用二进制位表示（0-6 分别表示周一到周日）
   */
  weekDay?: number
}

/**
 * 医生出诊时间预约 DO
 */
export interface ClinicDefaultAppointmentTimeDO {
  /**
   * 预约状态
   */
  appointmentStatus?: number
  /**
   * 预约时间
   */
  appointmentTime?: string
  /**
   * 预约日期
   */
  clinicDate?: string
  /**
   * 时间段id
   */
  clinicDefaultTimeId?: number
  /**
   * 创建时间
   */
  createTime?: string
  /**
   * 创建者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  creator?: string
  /**
   * 是否删除
   */
  deleted?: boolean
  /**
   * 唯一Id
   */
  id?: number
  /**
   * 更新者，目前使用 SysUser 的 id 编号
   *
   * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
   */
  updater?: string
  /**
   * 最后更新时间
   */
  updateTime?: string
}

interface GetAppointmentTimeListReq {
  doctorId: number
  // YYYY-MM-DD
  appointmentDate?: string
  clinicTimePhaseIds?: number[]
}

export const ClinicScheduleApi = {
  /**
   * 根据科室和出诊日期或者医生Id获得医生出诊安排
   * @param params
   */
  getDoctorList: (params: GetClinicScheduleRespReq) => {
    return getAction<GetClinicScheduleRespVO[]>('/healthcare/clinic-schedule/getClinicDoctors', params);
  },

  /**
   * 根据科室获取15日内的医生出诊情况
   * @param sectionId
   */
  getDoctorClinicListDays: (sectionId: number, doctorId?: number) => {
    return getAction<GetDoctorClinicDaysRespVO[]>('/healthcare/clinic-schedule/getDoctorClinicListDays', {
      sectionId,
      doctorId
    });
  },

  /**
   * 根据医生名称获得医生出诊安排列表
   * @param name
   */
  getClinicScheduleListByName: (name?: string) => {
    return getAction<GetClinicScheduleRespVO[]>('/healthcare/clinic-schedule/getClinicScheduleListByName', {
      name
    });
  },

  /**
   * 获得医生出诊时间段的预约时间列表
   */
  getAppointmentTimeList: (params: GetAppointmentTimeListReq) => {
    return postAction<ClinicDefaultAppointmentTimeDO[]>('/healthcare/clinic-schedule/getAppointmentTimeList', params);
  }

};
